Нагрузочное тестирование с tsung

Для нагрузочного тестирования можно использовать программу tsung

Установка tsung #


apt install tsung

Сценарий тестирования #

Программе tsung нужно передать файл с описанием сценария теста. Вот пример простого тестового сценария.


<?xml version="1.0"?>
<!DOCTYPE tsung SYSTEM "/usr/share/tsung/tsung-1.0.dtd">
<tsung loglevel="debug" version="1.0">
  <clients>
    <client host="localhost" use_controller_vm="true" maxusers="64000" />
  </clients>

  <servers>
    <server host="localhost" port="8087" type="tcp" /> 
  </servers>

  <load>
    <arrivalphase phase="1" duration="60" unit="second">
        <users maxnumber="64000" arrivalrate="2500" unit="second" />
    </arrivalphase>
  </load>

  <options>
    <option name="ports_range" min="1025" max="65535"/>
  </options>

  <sessions>
    <session name="websocket" probability="100" type="ts_websocket">
        <request>
             <websocket type="connect" path="/comet-server/ws/sesion=&amp;myid=&amp;devid=0&amp;v=3.24&amp;uuid=48wTOvoa-uEtC0thHzBkIKir14sXgkOy&amp;api=js"></websocket>
        </request>


        <for var="i" from="1" to="20000" incr="1">
          <thinktime value="150"/>
        </for>

        <request>
            <websocket type="close"></websocket>
        </request>
    </session>
  </sessions>
</tsung>

В нём указано что к localhost к порту 8087 надо подключатся по вебсокетам. И создавать по 2500 тысячи подключений каждую секунду до тех пор пока их в сумме не наберётся 64000.

То есть этот сценарий просто создаёт тестовую нагрузку в 64000 пользователей онлайн. Тест синтетический и реальные 64000 будут нагружать сервер несколько по другому а не просто висеть онлайн, но это уже от приложения и предполагаемого сценария использования комет сервера можно составить свой сценарий тестирования который бы отражал ваш тип нагрузки на комет сервер.

Нагрузка более чем 64000 онлайн #

Нагрузка в 64000 это максимум который позволит создать операционная система. Если хотите больше то надо тестировать один сервер с нескольких машин с tsung одновременно. TCP-соединение уникально определяется четверкой [source ip, source port, dest ip, dest port], таким образом с одной машины на 1 порт сервера можно создать не более 64 тыс одновременных соединений

Запуск сервера

Для того чтобы ОС позволила открыть столько соединений надо увеличить ограничения на количество файловых дескрипторов командой


ulimit -m 64000 

В файле comet.ini надо в секции benchmark задать настройки секций benchmark и ws


[benchmark]
to_log = true   ; Вывод замеров о нагрузке в лог  


[ws]
ip = 0.0.0.0
backlog = 10000
epoll_size = 100000
thread_num = 12    ; количество потоков, делайте больше чем ядер на сервере так как сервер не lock-free
benchmark = 1      ; Интервал между замерами нагрузки (0 = не замерять)
port = 8087
uptimeTestInterval = 600 ; Интервал для проверок uptime у соединений (так же за одно выправляет значение счётчика пользователей онлайн)
maxUptime = 0 ; Максимально значение uptime после которого коннект отключается.

А потом запустить сервер в консольном режиме чтоб видеть вывод статистики


./cpp_comet

Запуск теста

Нагрузочный тест запускаем так:


ulimit -m 64000
tsung -f ~/tsung.xml start

В tsung аргументом if передаём файл сценария для тестирования.

Анализ результатов

В процессе тестирования вы можете наблюдать за загрузкой ОС на пример через программы htop или iotop Проверить то что встроенный в комет сервер счётчик общего количества соединений онлайн показывает цифры близкие к правде можно командой:


ss -p | grep "cpp_comet" | wc -l

Она подсчитает количество входящих соединений средствами операционной системы.

По окончании тестирования tsung в папку складывает отчёт о тестировании. Но чтобы его было можно посмотреть надо его обработать скриптом который идёт вместе с самим tsung. Скрипт лежит в папке /usr/lib/tsung/bin/tsung_stats.pl


cd /home/victor/.tsung/log/20170524-1159
/usr/lib/tsung/bin/tsung_stats.pl

После чего скрипт с генерирует уже человеко читаемый отчёт о тестировании.


Следует учитывать то что в данном сценарии и тест и сервер на одной машине так что грузить они её будут совместно. Для чистоты эксперимента рекомендуется сервер запускать на одной машине, а tsung на другой машине.